<p><strong>MYSQL</strong></p>

<p>必须先选择 MySQL 的表后，再选择 目标库的MySQL 插件，在选择 目标 库表的时候，如果目标表字段和源MySQL表字段一致的情况下会自动填充</p>
<p>假如绑定字段映射关系,没有配置的映射关系的字段,将进行同步，与此同时,请在目标库表里,将没有配置字段映射关系的字段,设置默认值,防止出错！</p>

<p>&nbsp;</p>
<p>目标库表数据类型尽可能和源库一致</p>
<p>假如目标库表是varchar 等字符串类型，源表是其他类型,数据转换不会有问题</p>
<p>&nbsp;</p>
<p style="color: #F00">假如不选择表的情况下,请确保目标库里有和源库保持一模一样表名及结构的表(并不会自动创建表)</p>
<p>&nbsp;</p>

<p>以下是转换的大概情况</p>

        <style type="text/css">
            #typeDesc { padding: 20px 0px;}
            #typeDesc table { border-color:Black; border-style:dotted; border-width:0px; border-right-width:1px; border-bottom-width:1px; margin:0; padding:0; border-spacing:0; }
            #typeDesc td,th { border-color:Black; line-height: 200%; padding: 10px; border-style:dotted; border-width:0px; border-top-width:1px; border-left-width:1px;}
        </style>
        <div id="typeDesc">
            <table>
                <tr>
                <th>源表类型</th>
                <th>目标表类型</th>
                <th>是否有问题</th>
                <th>备注</th>
                </tr>

                <tr>
                <td>varchar,char,text等字符串</td>
                <td>int 等类型</td>
                <td>Y</td>
                <td>
                    假如源表存的是数字，会转成int相应类型,但值不能超过目标类型的大小</br>
                    假如源表是其他字符串数据，转换会有问题
                </td>

                </tr>

                <tr>

                <td>int,bit等类型</td>
                <td>varchar,var等类型</td>
                <td>N</td>
                <td>
                    只要int转成字符串长度，不超过目标表的类型长度就没有问题
                </td>
                </tr>

                <tr>
                <td>int,bit等类型</td>
                <td>int,bit等类型</td>
                <td>N</td>
                <td>
                    相同类型转换不会有问题
                </td>
                </tr>

                <tr>
                <td>varchar,char,text等字符串</td>
                <td>varchar,char,text等字符串</td>
                <td>N</td>
                <td>
                    相同类型转换不会有问题
                </td>
                </tr>

                <tr>
                <td>varchar,char,text等字符串</td>
                <td>set</td>
                <td>Y</td>
                <td>
                    源表数据，不在目标表范围内就会有问题
                </td>
                </tr>
            </table>

        </div>

<p>&nbsp;</p>

<p><strong>自动匹配表</strong></p>

<p>假如没有选择目标表名,则在同步的时候,按源表名和结构自动匹配表(<strong>并不会自动创建表</strong>),需要用户自行在目标库里,事先将 MySQL 源表结构导入目标库</p>

<p>假如在选择了  FilterQuery ：False 的情况下, 源表的 DDL 操作, 目标库也会执行相应的 DDL 操作 ,请源库执行 DDL 操作的时候，尽可能不要  SchemaName.TableName 这种跨库SQL语句执行</p>
<p>不需要 DDL 支持的情况下 设置 FilterQuery ：True </p>
<p>TiDB 虽然兼容 MySQL 传输协议,但因为 TiDB 对 DDL 限制更多,比如 不支持同时 ALTER 多个字段,表字段类型变更只支挂无损操作等，请自行决定是否要设置 FilterQuery ：False </p>

<p>&nbsp;</p>

<p><strong>同步模式</strong></p>

以下不同模式 源操作对应 目标库操作 对比
<div id="typeDesc">
    <table>
        <tr>
            <th>操作/同步模式</th>
            <th>INSERT</th>
            <th>UPDATE</th>
            <th>DELETE</th>
        </tr>

        <tr>
            <td>普通模式(Normal)</td>
            <td>REPLACE INTO</td>
            <td>INSERT ON DUPLICATE KEY UPDATE</td>
            <td>DELETE</td>
        </tr>
        <tr>
            <td>日志模式-修改(LogUpdate)</td>
            <td>REPLACE INTO</td>
            <td>INSERT ON DUPLICATE KEY UPDATE</td>
            <td>INSERT ON DUPLICATE KEY UPDATE</td>
        </tr>

        <tr>
            <td>日志模式-追加(LogAppend)</td>
            <td>INSERT INTO</td>
            <td>INSERT INTO</td>
            <td>INSERT INTO</td>
        </tr>
        <tr>
            <td>不同步数据(NoSyncData)</td>
            <td>/</td>
            <td>/</td>
            <td>/</td>
        </tr>

    </table>
</div>

<p> 不同步数据(NoSyncData) 只是不同步数据,假如配置了  FilterQuery:False , 还是会同步 DDL 的</p>

<p> </p>

<p> </p>

<p> </p>

<p><strong>连接配置</strong></p>

<p>eg  : root:root123@tcp(10.40.6.89:3306)/bifrost_test</p>


<p><strong>自动过滤规则</strong></p>

<p>假如同一个主键的数据，在同一批次刷数据，会自动过滤多余操作，进行性能优化操作（ 只限 普通模式(Normal) 和 日志模式-修改(LogUpdate) ，日志模式-修改(LogUpdate) ）</p>

<p>&nbsp;</p>
<p>1. 假如 id = 1 这条数据，连接有 insert ,delete ,update 操作</p>
<p>则只会执行最后的 update 操作，不会执行前面insert 及 delete操作</p>

<p>&nbsp;</p>
<p>2. 假如 id = 1 这条数据，连接有 insert ,delete ,insert ,delete 顺序操作</p>
<p>则只会执行最后的 delete 操作一次，不会执行 insert</p>


<p>&nbsp;</p>


<p><strong>标签</strong></p>

<p>{$Timestamp} : 同步的时间戳,并不是 Binlog 发生的时间</p>
<p>{$EventType} : 事件类型,insert delete update 三个字符串</p>

<p>{$BinlogTimestamp} : Binlog记录的时间戳</p>
<p>{$BinlogFileNum} : Binlog文件编号,并不是 整个Binlog文件名,比如 binlog 文件是 mysql-bin.000001 那这个 BinlogFileNum 的值 是1</p>
<p>{$BinlogPosition} : Binlog position 位点</p>

<p>&nbsp;</p>

<p><strong>NULL 值</strong></p>

<p>所有数据类型都支持Null值,假如源表是 Null ,但是目标库有默认值,则同步的时候,目标表以默认值填充</p>
<p>假如 NullTransferDefault参数配置成了True,即使目标库表中没有默认值,也会强制转成相对应类型的默认值</p>

<div id="typeDesc">
    <table>
        <tr>
            <th>类型</th>
            <th>默认值</th>
        </tr>

        <tr>
            <td>int,bigint,smallinit,mediumint,tinyint,bit</td>
            <td>0</td>
        </tr>
        <tr>
            <td>timestamp</td>
            <td>1970-01-01 00:00:01</td>
        </tr>
        <tr>
            <td>datetime</td>
            <td>1000-01-01 00:00:00</td>
        </tr>
        <tr>
            <td>date</td>
            <td>1970-01-01</td>
        </tr>
        <tr>
            <td>time</td>
            <td>00:00:01</td>
        </tr>
        <tr>
            <td>year</td>
            <td>1970</td>
        </tr>

        <tr>
            <td>bool</td>
            <td>false</td>
        </tr>

        <tr>
            <td>其他</td>
            <td>空("")</td>
        </tr>

    </table>
</div>
<p>&nbsp;</p>

<p><strong>备注</strong></p>

<p>必须只能选择一个字段为主键</p>
<p>不支持批量设置表</p>
<p>BatchSize参数代表累积多少条数据刷一次数据到MySQL，假如一直没有数据从 MySQL 过来，则默认5秒超时，也会进行刷一次</p>
